﻿//#include "Tree.h"
//void PutData(BTNode** root, BTDataType* a, int n, int* pi) {
//	if ((*pi) == n) {
//		return;
//	}
//	if (a[(*pi)] == '#') {
//		//注意：当串指针型时，在函数中不可用指针直接赋值，即int* root;root = 0,因为此举是直接赋值，没有改变操作
//		(*root) = NULL;//想要改变指针操作要用二级指针来进行解引用改变一级指针
//		(*pi)++;
//		return;
//	}
//	(*root)->_data = a[(*pi)++];
//	(*root)->_left = (BTNode*)malloc(sizeof(BTNode));
//	(*root)->_right = (BTNode*)malloc(sizeof(BTNode));
//	PutData(&(*root)->_left, a, n, pi);
//	PutData(&(*root)->_right, a, n, pi);
//}
//BTNode* BinaryTreeCreate(BTDataType* a, int n, int* pi) {
//	BTNode* root = (BTNode*)malloc(sizeof(BTNode));
//	PutData(&root, a, n, pi);
//	return root;
//}
////采用后序遍历法进行删除,此种方式较为简单
//void BinaryTreeDestory(BTNode** root) {
//	if (!(*root)) {
//		free(*root);
//		*root = 0;
//		return;
//	}
//	BinaryTreeDestory(&(*root)->_left);
//	BinaryTreeDestory(&(*root)->_right);
//	free(*root);
//	*root = 0;
//}
//// 二叉树叶子节点个数
//int BinaryTreeSize(BTNode* root) {
//	if (!root) {
//		return 0;
//	}
//	return BinaryTreeSize(root->_left) + BinaryTreeSize(root->_right) + 1;
//}
//// 二叉树叶子节点个数
//int BinaryTreeLeafSize(BTNode* root) {
//	if (!root) {
//		return 0;
//	}
//	if (!root->_left && !root->_right) {
//		return 1;
//	}
//	return BinaryTreeLeafSize(root->_left) + BinaryTreeLeafSize(root->_right);
//}
//// 二叉树第k层节点个数
//int BinaryTreeLevelKSize(BTNode* root, int k) {
//	if (!root) {
//		return 0;
//	}
//	if (k == 1) {
//		return 1;
//	}
//	return BinaryTreeLevelKSize(root->_left, k - 1)
//		+ BinaryTreeLevelKSize(root->_right, k - 1);
//}
//// 二叉树查找值为x的节点
//BTNode* BinaryTreeFind(BTNode* root, BTDataType x) {
//	if (!root) {
//		return 0;
//	}
//	if (root->_data == x) {
//		return root;
//	}
//	BTNode* LeftNode = BinaryTreeFind(root->_left, x);
//
//	BTNode* RightNode = BinaryTreeFind(root->_right, x);
//
//
//}
//
////前
//void BinaryTreePrevOrder(BTNode* root) {
//	if (!root) {
//		fprintf(stdout, "NULL ");
//		return;
//	}
//	fprintf(stdout, "%c ", root->_data);
//	BinaryTreePrevOrder(root->_left);
//	BinaryTreePrevOrder(root->_right);
//}
////中
//void BinaryTreeInOrder(BTNode* root) {
//	if (!root) {
//		fprintf(stdout, "NULL ");
//		return;
//	}
//	BinaryTreePrevOrder(root->_left);
//	fprintf(stdout, "%c ", root->_data);
//	BinaryTreePrevOrder(root->_right);
//}
////后
//void BinaryTreePostOrder(BTNode* root) {
//	if (!root) {
//		fprintf(stdout, "NULL ");
//		return;
//	}
//	BinaryTreePrevOrder(root->_left);
//	BinaryTreePrevOrder(root->_right);
//	fprintf(stdout, "%c ", root->_data);
//}

//#include "Tree.h"
//int main() {
//	char a[] = "ABD##E#H##CF##G##";
//	int i = 0, * x = &i;
//	BTNode* root = BinaryTreeCreate(a, strlen(a), x);//将a数组以前序的方式插入二叉树中
//	BinaryTreePrevOrder(root);//前序输出
//	puts("");
//
//	i = BinaryTreeSize(root);// 二叉树节点个数
//	fprintf(stdout, "二叉树的节点数: %d\n", i);
//
//	i = BinaryTreeLeafSize(root);// 二叉树叶子节点个数
//	fprintf(stdout, "二叉树叶子节点的个数: %d\n", i);
//
//	i = BinaryTreeLevelKSize(root, 3);// 二叉树第3层节点个数
//	fprintf(stdout, "二叉树第3层节点的个数: %d\n", i);
//
//	BTNode* node = BinaryTreeFind(root, 'E');// 二叉树查找值为'E'的节点
//	if (!node) {
//		puts("并无此度");
//	}
//	else {
//		puts("存在此度");
//	}
//
//	//void BinaryTreeLevelOrder(BTNode * root);// 层序遍历
//
//	//int BinaryTreeComplete(BTNode * root);// 判断二叉树是否是完全二叉树
//
//	BinaryTreeDestory(&root);//销毁二叉树
//	return 0;
//}